package com.example.miniodemo.service.impl;

import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.example.miniodemo.common.result.ResultEnum;
import com.example.miniodemo.common.service.FileApi;
import com.example.miniodemo.common.util.AssertUtils;
import com.example.miniodemo.common.util.PubUtils;
import com.example.miniodemo.pojo.domain.SystemFile;
import com.example.miniodemo.mapper.SystemFileMapper;
import com.example.miniodemo.common.service.SystemFileService;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.web.multipart.MultipartFile;

/**
 * 系统文件 业务逻辑层 具体实现
 *
 * @author Lv
 * @date 2022/11/11
 */
@Slf4j
@Service
public class SystemFileServiceImpl extends ServiceImpl<SystemFileMapper, SystemFile> implements SystemFileService {
    @Autowired
    private SystemFileMapper systemFileMapper;

    @Autowired
    private FileApi fileApi;

    /**
     * 上传单个文件并写入数据库
     *
     * @param multipartFile 上传文件
     * @return 文件id
     */
    @Override
    public Integer upload(MultipartFile multipartFile) {
        // 当文件为空 不做持久化 返回空
        if (PubUtils.isNull(multipartFile) || PubUtils.isEmpty(multipartFile.getName())) {
            return null;
        }
        // 上传文件
        String fileUrl = fileApi.uploadFile(multipartFile);
        // 持久化数据
        SystemFile systemFile = new SystemFile();
        systemFile.setFileName(multipartFile.getOriginalFilename());
        systemFile.setFileUrl(fileUrl);
        log.info(multipartFile.getOriginalFilename());
        systemFileMapper.insert(systemFile);
        return systemFile.getId();
    }

    /**
     * 通过系统文件id获取文件信息
     *
     * @param id 系统文件id
     * @return
     */
    @Override
    public SystemFile get(Integer id) {
        SystemFile systemFile = systemFileMapper.selectById(id);
        AssertUtils.notNull(systemFile, ResultEnum.DATA_NOT_EXIST);
        return systemFile;
    }
}
